package cn.edu.scau.cmi.crawler.controller;

import java.io.File;
import java.util.Calendar;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import cn.edu.scau.cmi.ema.domain.Crawlerfile;
import cn.edu.scau.cmi.ema.domain.Site;
import cn.edu.scau.cmi.ema.util.CmiSetUtil;
import cn.edu.scau.cmi.ema.util.CmiTimeUtil;
import cn.edu.scau.cmi.front.controller.FrontCmiEmaController;

/*
 * 处理爬取的文件的控制器
 * 
 * 
 * 由于junit运行在maven碰到了一些异常，暂时不适用测试的方式运行，采用controller的方式运行。
	public class EventImportMaintainController extends CmiTestCase {
	
	爬取文件包含不合格检测、合格检测、说明，需要合理的导入。
*/

@Controller
public class DeprecateExcelImportController extends FrontCmiEmaController{
	
//	准备开始导入深圳的数据。
//	<a title="查看" href="/ema/importShenzhenCheckXls?fileName=深圳市市场监督管理局2019年食品安全抽样检验情况通报（春节特别版）_附件1：抽检不合格信息-数据分析.xlsx&amp;"><i class="glyphicon glyphicon-search"></i>导入</a>
// 所有的文件一次性导入。
	@Transactional(timeout = 300000000)
	@RequestMapping(value = "/importShenzhenCheckXls", method = RequestMethod.GET)
	public ModelAndView importShenzhenCheckXls(HttpServletRequest request) throws Exception {
		ModelAndView mav = new ModelAndView();
		
		String fileNameString = request.getParameter("fileName");

		Site site = CmiSetUtil.getSoleInstance(siteDAO.findSiteByName("深圳市市场监督管理局"));
		
		String timeStamp=CmiTimeUtil.getYMDHMSString(Calendar.getInstance());
		String toImportExcelDirectoryName = "E:/Workspace/git/ema/ema/项目文档/爬虫爬取的数据/待处理/深圳/不合格检测/";
		String importedDirectoryName = "E:/Workspace/git/ema/ema/项目文档/爬虫爬取的数据/已处理/深圳/不合格检测/";
		String nonImportDirectoryName = "E:/Workspace/git/ema/ema/项目文档/爬虫爬取的数据/未处理/深圳/不合格检测/";//将爬取初始状态的数据放入到这个目录中

//		测试单个的文件，String toImportExcelDirectoryName="项目文档/静态适配数据";
		File sourceFile = new File(toImportExcelDirectoryName + fileNameString);
		File importDirectory = new File(importedDirectoryName);
//		File importedDirectoryName
		
		System.out.println("\n\n\n\n\n准备处理的文件是：" + sourceFile.getName());
		Crawlerfile uri = new Crawlerfile();
		String samr = null;
		
//		shenzhenAMRImportService.importEvent(uri);
		
		FileUtils.copyFileToDirectory(sourceFile, importDirectory);
		FileUtils.forceDelete(sourceFile);
		FileUtils.forceDeleteOnExit(sourceFile);
		FileUtils.deleteQuietly(sourceFile);

//		FileUtils.moveFileToDirectory(sourceFile, importDirectory, true);
		System.out.println("导入成功，返回列表页面。");
		
		File dir = new File("E:/Workspace/git/ema/ema/项目文档/爬虫爬取的数据/待处理/深圳/不合格检测");
		String[] files = dir.list();
		mav.addObject("files", files);
		
		mav.setViewName("adapter/selectImportXls.jsp");
		
		return mav;
	}
	
	
//	准备开始导入深圳的数据。
//	<a title="查看" href="/ema/importShenzhenCheckXls?fileName=深圳市市场监督管理局2019年食品安全抽样检验情况通报（春节特别版）_附件1：抽检不合格信息-数据分析.xlsx&amp;"><i class="glyphicon glyphicon-search"></i>导入</a>
// 所有的文件一次性导入。
	@Transactional(timeout = 300000000)
	@RequestMapping(value = "/importAllShenzhenCheckXls", method = RequestMethod.GET)
	public String importAllShenzhenCheckXls() throws Exception {

		Site site = CmiSetUtil.getSoleInstance(siteDAO.findSiteByName("深圳市市场监督管理局"));
		String samr = null;
		
		String toImportExcelDirectoryName = "E:/Workspace/git/ema/ema/项目文档/爬虫爬取的数据/待处理/深圳/不合格检测";
		String nonImportDirectoryName = "E:/Workspace/git/ema/ema/项目文档/爬虫爬取的数据/未处理/深圳/不合格检测";//将爬取初始状态的数据放入到这个目录中
		
//		（2）迭代所有的文件
		String[] subfix = {"xlsx", "xls"};
		//		迭代所有的文档
		Iterator<File> fileIterators = FileUtils.iterateFiles(new File(toImportExcelDirectoryName), subfix, false);
		while(fileIterators.hasNext()) {
			File file = fileIterators.next();
			System.out.println("\n\n\n\n\n准备处理的文件是：" + file.getName());
			Crawlerfile uri = new Crawlerfile();
//			shenzhenAMRImportService.importEvent(uri);
		}
		
//		测试单个的文件，String toImportExcelDirectoryName="项目文档/静态适配数据";
//		File shenzhenDataFile = new File("深圳市市场监督管理局2019年食品安全抽样检验情况通报（春节特别版）_附件1：抽检不合格信息.xlsx");
//		shenzhenAMRImportService.importExcel(site, toImportExcelDirectoryName, nonImportDirectoryName, shenzhenDataFile, timeStamp);
		
		return "OK";
	}
	
	/**
	 * 利用测试更新deteceStandard的path和文件名, 知识库需要有文档，也能让用户下载查看，本类主要是将知识库的内容初始化到数据库中。 (1)
	 * 检查图片数据，如果在图片目录中有该图片， 知识库文件命名规范：
	 * 
	 * @throws Exception
	 * 
	 */

	/**
	 * 目前导入失败的部分没有回滚 运行前要到applicationContext4DAO修改transactionTimeout，
	 * 把数值调大，否则程序会运行时由于事务终止而无法操作数据库
	 * 
	 * @throws Exception
	 */
//	@Test
	public void importLidanExcel() throws Exception {

		// 导入李丹数据，需要修改importLiDan()里面的nonAdapterPath，importLiDanExcel()里面的siteName
		
		String sourceDataDirectory="项目文档/静态适配数据";
		String notImportDirectory="nonImportDirectoryName";//将爬取初始状态的数据放入到这个目录中
		
		File zhangXinLianDataFile = new File("（5）静态适配数据-张星联.xlsx");
		
		Site site = CmiSetUtil.getSoleInstance(siteDAO.findSiteByName("中国农业科学院农业质量标准与检测技术研究所"));
				
		Crawlerfile excel = new Crawlerfile();
		String samr = null;
//		lidanExcelImportService.importEvent(excel);
	}

//	/	准备开始导入西安的数据。
//	<a title="查看" href="/ema/importShenzhenCheckXls?fileName=深圳市市场监督管理局2019年食品安全抽样检验情况通报（春节特别版）_附件1：抽检不合格信息-数据分析.xlsx&amp;"><i class="glyphicon glyphicon-search"></i>导入</a>
// 所有的文件一次性导入。
	@Transactional(timeout = 300000000)
	@RequestMapping(value = "/importXianCheckXls", method = RequestMethod.GET)
	public ModelAndView importXianCheckXls(HttpServletRequest request) throws Exception {
		ModelAndView mav = new ModelAndView();
		
		String fileNameString = request.getParameter("fileName");

		Site site = CmiSetUtil.getSoleInstance(siteDAO.findSiteByName("西安市市场监督管理局"));
		
		String timeStamp=CmiTimeUtil.getYMDHMSString(Calendar.getInstance());
		String toImportExcelDirectoryName = "E:/Workspace/git/ema/ema/项目文档/爬虫爬取的数据/待处理/西安/不合格检测/";
		String importedDirectoryName = "E:/Workspace/git/ema/ema/项目文档/爬虫爬取的数据/已处理/西安/不合格检测/";
		String nonImportDirectoryName = "E:/Workspace/git/ema/ema/项目文档/爬虫爬取的数据/未处理/西安/不合格检测/";//将爬取初始状态的数据放入到这个目录中

//		测试单个的文件，String toImportExcelDirectoryName="项目文档/静态适配数据";
		File sourceFile = new File(toImportExcelDirectoryName + fileNameString);
		File importDirectory = new File(importedDirectoryName);
//		File importedDirectoryName
		
		System.out.println("\n\n\n\n\n准备处理的文件是：" + sourceFile.getName());
		Crawlerfile uri = new Crawlerfile();
		
		String samr = null;
//		shenzhenAMRImportService.importEvent(uri);
		
		FileUtils.copyFileToDirectory(sourceFile, importDirectory);
		FileUtils.forceDelete(sourceFile);
		FileUtils.forceDeleteOnExit(sourceFile);
		FileUtils.deleteQuietly(sourceFile);

//		FileUtils.moveFileToDirectory(sourceFile, importDirectory, true);
		System.out.println("导入成功，返回列表页面。");
		
		File dir = new File("E:/Workspace/git/ema/ema/项目文档/爬虫爬取的数据/待处理/深圳/不合格检测");
		String[] files = dir.list();
		mav.addObject("files", files);
		
		mav.setViewName("adapter/selectImportXls.jsp");
		
		return mav;
	}
	
	@Transactional(timeout = 300000000)
	@RequestMapping(value = "/importCheckXls", method = RequestMethod.GET)
	public ModelAndView importCheckXls(HttpServletRequest request) throws Exception {
		
		String cityName = request.getParameter("cityName");
		String fileName = request.getParameter("fileName");
		
		Site site = CmiSetUtil.getSoleInstance(siteDAO.findSiteByName(cityName  + "市场监督管理局"));
		
		String timeStamp=CmiTimeUtil.getYMDHMSString(Calendar.getInstance());
		
//		private String baseDirectory = "E:/Workspace/git/ema/ema/项目文档/爬虫爬取的数据/";
		
		String toImportExcelDirectoryName = samrDirectory + cityName + samrNonQualifyDetect;
		String importedDirectoryName = samrDirectory + cityName + samrImportedDetect;
		String nonImportDirectoryName = samrDirectory + cityName + samrNonImportDetect;//将爬取初始状态的数据放入到这个目录中

//		测试单个的文件，String toImportExcelDirectoryName="项目文档/静态适配数据";
		
//		很奇怪的事情：URL中有文件的后罪名，但是到了这里没有？？？？？？
		
		
		File toImportExcelFile = new File(toImportExcelDirectoryName + fileName);
		File importedDirectory = new File(importedDirectoryName);
		
		System.out.println("\n\n\n\n\n准备处理的文件是：" + toImportExcelFile.getName());
		Crawlerfile uri = new Crawlerfile();
		
		String samr = null;
		switch(cityName) {
//		case "深圳市" : shenzhenAMRImportService.importEvent(uri);break;
//		case "西安市" : xianAMRImportService.importEvent(uri);break;
//		case "重庆市" : chongqingAMRImportService.importEvent(uri);break;
//		case "江苏省" : jiangsuAMRImportService.importEvent(uri);break;
		}
		
		FileUtils.copyFileToDirectory(toImportExcelFile, importedDirectory);
		FileUtils.forceDelete(toImportExcelFile);
		FileUtils.forceDeleteOnExit(toImportExcelFile);
		FileUtils.deleteQuietly(toImportExcelFile);

//		FileUtils.moveFileToDirectory(sourceFile, importDirectory, true);
		System.out.println("导入成功，返回列表页面。");
		
//		成功完成后，利用重定向指向可供选泽的列表页面，注意：重定向进入的时候，需要把当前的文件列表的数据清空。
		
		ModelAndView mav = new ModelAndView("redirect:selectImportXls");
//		ModelAndView mav = new ModelAndView("/adapter/selectImportXls.jsp");//???

		return mav;
	}
}